package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;

import java.util.List;
@Component
@Mapper
public interface GoodsDao {
    /**
     * 分页查询Goods
     * @param start 起始行
     * @param pageSize 从起始行开始的查询条数
     * @param codeOrName 编码或名称
     * @param goodsTypeId 商品的类型
     * @return
     */
    List<Goods> getAllByPage(Integer start, Integer pageSize, String codeOrName, Integer goodsTypeId);

    /**
     * t_goods表,t_goods_type表, t_sale_list_goods 表联合查询
     * @param start
     * @param pageSize
     * @param codeOrName
     * @param goodsTypeId
     * @return
     */
    List<Goods> getComplexPage(Integer start, Integer pageSize, String codeOrName, Integer goodsTypeId);

    /**
     * 修改商品
     * @param goods
     */
    void update(Goods goods);

    /**
     * 插入商品
     * @param goods
     */
    void insert(Goods goods);

    /**
     * 商品删除（要判断商品状态,入库、有进货和销售单据的不能删除）state=0才能删除
     * @param goodsId
     */
    void delete(Integer goodsId);

    /**
     * 无库存商品列表展示（可以根据商品名称或编码查询）
     * @param start
     * @param pageSize
     * @param nameOrCode
     * @return
     */
    List<Goods> getNoInventoryQuantity(Integer start, Integer pageSize, String nameOrCode);

    /**
     * 有库存商品列表展示（可以根据商品名称或编码查询）
     * @param start
     * @param pageSize
     * @param nameOrCode
     * @return
     */
    List<Goods> getHasInventoryQuantity(Integer start, Integer pageSize, String nameOrCode);

    /**
     * 添加库存、修改数量或成本价
     * @param goods
     */
    void saveStock(Goods goods);

    /**
     * 根据id查询
     * @param goodsId
     * @return
     */
    Goods getById(Integer goodsId);

    /**
     * 删除库存(库存数量修改为0)
     * @param goodsId
     */
    void deleteStock(Integer goodsId);

    /**
     * 获得t_goods的行数
     * @return
     */
    Integer getTotal();

    /**
     * 商品预警，当前库存量 小于 库存下限的商品信息inventory_quantity<minNum
     * @return
     */
    List<Goods> listAlarm();

    /**
     * 更新库存
     * @param goodsId
     * @param goodsNum
     */
    void updateQuantity(Integer goodsId, Integer goodsNum);
}
